package top.zhangjianyong.tools.indicator.strategy;

import top.zhangjianyong.tools.indicator.context.IndicatorContext;
import top.zhangjianyong.tools.indicator.model.TechnicalIndicatorResult;

/**
 * 技术指标计算接口
 * 采用策略模式，每个技术指标都实现此接口
 *
 * @author zhangjianyong
 * @date 2024/01/01
 */
public interface TechnicalIndicator {

    /**
     * 获取指标名称
     *
     * @return 指标名称
     */
    String getName();

    /**
     * 判断是否可以计算（数据量是否足够）
     *
     * @param context 计算上下文
     * @return true表示可以计算，false表示数据不足
     */
    boolean canCalculate(IndicatorContext context);

    /**
     * 计算技术指标
     *
     * @param context 计算上下文，包含K线数据列表和配置参数
     * @return 技术指标计算结果，包含指标名称、计算结果值、计算状态等
     */
    TechnicalIndicatorResult calculate(IndicatorContext context);

    /**
     * 获取最小数据量要求
     *
     * @return 最小数据量
     */
    int getMinDataSize();
}

